package 爬虫;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class 条件爬虫 {
    public static void main(String[] args) {
        String text = "java自从95年问世以来，经历了很多版本，目前企业中用的最多的是JAva8和Java11，" +
                "因为这两个是长期支持版本，下一个长期支持版本是JAVa17，" +
                "相信在未来不久JAVA17也会逐渐登上历史舞台。";
        //要求1:爬取版本号为8，11.17的Java文本，但是只要Java，不显示版本号。
        //1.定义正则表达式对象
        // ? 理解为前面的Java
        //？ =表示在Java后面要跟随的数据，但是在获取的时候只获取前面的部分
        //需求1
        String regex1 = "(?i)Java(?=8|11|17)";
        //需求2
        String regex2 = "((?i)Java)(8|11|17)";
        String regex3 = "((?i)Java)(?:8|11|17)";

        //需求3
        String regex4 = "((?i)Java)(?!8|11|17)";
        Pattern p2=Pattern.compile(regex4);
        //获取文本
        Matcher m2= p2.matcher(text);
//        while (m.find()){
//            System.out.println(m.group());
//        }

        //要求2：爬取版本号为8，11，17的Java文本。正确爬取结果为：Java8 Java11 Java17 Java17
        while (m2.find()){
            System.out.println(m2.group());
        }

        //总结
        //text=java7,java8,java18,java
        /* (?i): 忽略后面字母的大小写
           (?=):爬取后面带有该规则的数据,但是这个数据不会显示,eg:java(?=7|18|8)  结果为java,java,java 最后一个不会被爬取到
           (?:):爬取后面带有这个规则的数据,但是会显示,eg:java(?=7|18|8)  结果为Java7,java8,Java18
           (?!):爬取不是这个规则的其他数据,eg:java(?!7|18|8)  结果为,最后一个Java
         */
    }
}
